package com.hf.hutool;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import com.hf.Cat;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.util.Date;
import java.util.List;

/**
 * 目录
 *  1. 克隆 clone
 *  2. 转换 convert
 *  3. 日期时间工具 DateUtil
 *      日期时间对象 DateTime
 *  4. IO流相关
 *      IoUtil 流操作工具类
 *      FileUtil 文件读写工具和操作的工具类
 *      FileTypeUtil 文件类型判断工具类
 *      WatchMonitor 目录文件监听，封装了JDK1.7 的WatchService
 *      ClassPathResource 针对classpath中资源的访问封装
 *      FileReader 封装文件读取
 *      FileWriter 封装文件写入
 *  5. 工具类
 *      StrUtil
 *      ObjectUtil
 *          ObjectUtil.cloneByStream() 克隆序列化的对象
 *      ReflectUtil 反射工具
 *      PageUtil 分页工具
 *      ClipboardUtil 剪切板工具
 *      ClassUtil 类工具
 *  6. JavaBean
 *      Bean工具 BeanUtil
 *  7. 集合类
 *      CollUtil
 *      IterUtil
 *  8. MapUtil
 *  9. JSON 工具
 *      HexUtil EscapteUtil Unicode...
 *
 *
 *
 */
public class testHutool {

    public static void main( String[] args )
    {
        System.out.println("Hello world");

    }

    /*Hutool-core
     * */

    /*
        克隆
            泛性克隆接口
            泛型克隆类
            深克隆
    * */
    public static void coreClone() {
        Cat cat = new Cat("黄");
        Cat catClone = ObjectUtil.cloneByStream(cat);
        System.out.println( cat.getName() );
        System.out.println( catClone.getName() );
    }
    /*
        Convert类
            对各种各样的类型转换问题
    * */
    public static void coreConvert() {
        //1. 转化为字符串
        int a = 1;
        String aStr = Convert.toStr(a);

        long[] b = {1,2,3,4,5};
        String bStr = Convert.toStr(b);

        // 2. 转换为指定类型数组：
        String[] b1 = { "1", "2", "3", "4" };
        Integer[] intArray = Convert.toIntArray(b);
        Integer[] intArray1 = Convert.toIntArray(b1);
        System.out.println("转换为指定类型数组" + b + b1);

        // 3. 转换为日期对象：
        String a1 = "2017-05-06";
        Date value = Convert.toDate(a1);
        System.out.println("转换为日期对象" + value);

        //4. 转换为集合
        Object[] a2 = {"a", "你", "好", "", 1};
//        List<?> list = Convert.convert(List.class, a);
//        //从4.1.11开始可以这么用
        List<?> list = Convert.toList(a2);
        System.out.println("转换为集合" + list);
    }

    /*流的读写 可以总结为，从输入流中读取，写入输出流
     * */
    public static void coreIOStream_Copy(){
        BufferedInputStream in = FileUtil.getInputStream("d:/test.txt");
        BufferedOutputStream out = FileUtil.getOutputStream("d:/test2.txt");
        long copySize = IoUtil.copy(in, out, IoUtil.DEFAULT_BUFFER_SIZE);

    }
}
